In [ ]:
import multinet_lib

import pathlib
import pandas as pd
import networkx as nx
import numpy as np

import matplotlib.pyplot as plt

%load_ext autoreload
%autoreload 2

import henhoe2vec as hh2v
import ast
from sklearn.manifold import TSNE
import seaborn as sns
import matplotlib.pyplot as plt
In [ ]:
#Outputs
path = pathlib.Path().resolve()
save_path = path / "resources"

#Parameter for SBM
blocks = [5,5,15,15,5,5,10,5]
layers = 3

blocks_large = 5*np.array(blocks)



multiplex_RND = multinet_lib.Multiplex([nx.gnp_random_graph(np.sum(blocks),p=0.1) for _ in range (layers)])
multiplex_RND.plot_network()
multiplex_RND.plot_adj()

plt.show()

multiplex_perfect_SBM = multinet_lib.SBM_Multiplex(layers=layers,blocks=blocks,self_connectivity = 1,outer_connectivity = 0)
multiplex_perfect_SBM.plot_network()
multiplex_perfect_SBM.plot_adj()

multiplex_SBM = multinet_lib.SBM_Multiplex(layers=layers,blocks=blocks,self_connectivity = 0.7,outer_connectivity = 0.05)
multiplex_SBM.plot_network()
multiplex_SBM.plot_adj()


multiplex_SBM_mixed = multinet_lib.SBM_Multiplex(layers=layers,blocks=blocks,self_connectivity = 0.7,outer_connectivity = 0.05,block_mixing_chance=0.2)
multiplex_SBM_mixed.plot_network()
multiplex_SBM_mixed.plot_adj()

'''
multiplex_SBM_mixed_large = multinet_lib.SBM_Multiplex(layers=layers,blocks=blocks_large,self_connectivity = 0.7,outer_connectivity = 0.05,block_mixing_chance=0.2)
multiplex_SBM_mixed_large.plot_network()
multiplex_SBM_mixed_large.plot_adj()

multiplex_SBM_mixed_large.to_edgelist().loc[
        :, ["source", "source_layer", "target", "target_layer", "weight"]
    ].to_csv(save_path / "g1.edg", sep="\t", index=False, header=False)


multiplex_perfect_SBM_large = multinet_lib.SBM_Multiplex(layers=layers,blocks=blocks_large,self_connectivity = 0.7,outer_connectivity = 0.1)
multiplex_perfect_SBM_large.plot_network()
multiplex_perfect_SBM_large.plot_adj()

multiplex_perfect_SBM_large.to_edgelist().loc[
        :, ["source", "source_layer", "target", "target_layer", "weight"]
    ].to_csv(save_path / "g2.edg", sep="\t", index=False, header=False)

'''
In [ ]:
def plot2D_embeddings(path,true_blocks):
    df = pd.read_csv(path, sep="\t", index_col=0, header=None)

    df_embed = TSNE(n_components=2, learning_rate='auto', init='random', perplexity=3).fit_transform(df.values)
    df_embed = pd.DataFrame(df_embed,columns=['x','y'])

    df_embed.index = [ast.literal_eval(tpl) for tpl in df.index]
    df_embed["node"],df_embed["layer"] = zip(*df_embed.index.tolist())

    node_to_block = [block for block in range(len(true_blocks)) for _ in range(true_blocks[block])]
    df_embed['block'] = [node_to_block[int(float(node))] for node in df_embed['node']]

    

    
    plt.figure()
    ax = sns.scatterplot(df_embed,x='x',y='y',hue='block',style='layer',palette="deep") #,ax=axs[i])
    sns.move_legend(ax, "upper left", bbox_to_anchor=(1, 1))

    plt.show()

    return df,df_embed
In [ ]:
layers = 3
SBM_samples = 3
SBM_blocks = [[50,50,50,50,50], [80,20,80,20,50]] *SBM_samples 
sampled_SBMs = []

for i,blocks in enumerate(SBM_blocks):
    sampled_SBMs.append(multinet_lib.SBM_Multiplex(layers=layers,blocks=blocks,self_connectivity = 1,outer_connectivity = 0))
    sampled_SBMs[-1].plot()
    sampled_SBMs[-1].to_edgelist().loc[
        :, ["source", "source_layer", "target", "target_layer", "weight"]
    ].to_csv(save_path / ("sample"+str(i)+".edg"), sep="\t", index=False, header=False)

    hh2v.henhoe2vec.run(save_path / ("sample"+str(i)+".edg"), save_path, output_name=("sample"+str(i)+"embedded"),q=1.0,s=1.0,num_walks=20)

    df,df_embed = plot2D_embeddings(save_path / ("sample"+str(i)+"embedded.csv"),blocks)

    
[STATUS] Started parsing edgelist...
[STATUS] Finished parsing edgelist in 0 seconds
[STATUS] Started preprocessing transition probabilities...
[STATUS] Finished preprocessing transition probabilities in 2 seconds
[STATUS] Started generating random walks...
[STATUS] Finished generating random walks in 1 seconds
[STATUS] Started learning and saving embeddings...
[STATUS] Saved embeddings to /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources/sample0embedded.csv
[STATUS] Finished learning and saving embeddings in 0 seconds
Completed multilayer network embedding in 5.267873764038086 seconds. See results in /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources.
[STATUS] Started parsing edgelist...
[STATUS] Finished parsing edgelist in 0 seconds
[STATUS] Started preprocessing transition probabilities...
[STATUS] Finished preprocessing transition probabilities in 4 seconds
[STATUS] Started generating random walks...
[STATUS] Finished generating random walks in 2 seconds
[STATUS] Started learning and saving embeddings...
[STATUS] Saved embeddings to /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources/sample1embedded.csv
[STATUS] Finished learning and saving embeddings in 0 seconds
Completed multilayer network embedding in 7.3844451904296875 seconds. See results in /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources.
[STATUS] Started parsing edgelist...
[STATUS] Finished parsing edgelist in 0 seconds
[STATUS] Started preprocessing transition probabilities...
[STATUS] Finished preprocessing transition probabilities in 2 seconds
[STATUS] Started generating random walks...
[STATUS] Finished generating random walks in 1 seconds
[STATUS] Started learning and saving embeddings...
[STATUS] Saved embeddings to /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources/sample2embedded.csv
[STATUS] Finished learning and saving embeddings in 0 seconds
Completed multilayer network embedding in 5.307072401046753 seconds. See results in /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources.
[STATUS] Started parsing edgelist...
[STATUS] Finished parsing edgelist in 0 seconds
[STATUS] Started preprocessing transition probabilities...
[STATUS] Finished preprocessing transition probabilities in 4 seconds
[STATUS] Started generating random walks...
[STATUS] Finished generating random walks in 2 seconds
[STATUS] Started learning and saving embeddings...
[STATUS] Saved embeddings to /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources/sample3embedded.csv
[STATUS] Finished learning and saving embeddings in 0 seconds
Completed multilayer network embedding in 7.395597696304321 seconds. See results in /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources.
[STATUS] Started parsing edgelist...
[STATUS] Finished parsing edgelist in 0 seconds
[STATUS] Started preprocessing transition probabilities...
[STATUS] Finished preprocessing transition probabilities in 2 seconds
[STATUS] Started generating random walks...
[STATUS] Finished generating random walks in 1 seconds
[STATUS] Started learning and saving embeddings...
[STATUS] Saved embeddings to /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources/sample4embedded.csv
[STATUS] Finished learning and saving embeddings in 0 seconds
Completed multilayer network embedding in 5.324031829833984 seconds. See results in /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources.
[STATUS] Started parsing edgelist...
[STATUS] Finished parsing edgelist in 0 seconds
[STATUS] Started preprocessing transition probabilities...
[STATUS] Finished preprocessing transition probabilities in 4 seconds
[STATUS] Started generating random walks...
[STATUS] Finished generating random walks in 2 seconds
[STATUS] Started learning and saving embeddings...
[STATUS] Saved embeddings to /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources/sample5embedded.csv
[STATUS] Finished learning and saving embeddings in 0 seconds
Completed multilayer network embedding in 7.583036661148071 seconds. See results in /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources.
In [ ]:
hh2v.henhoe2vec.run(save_path / "g1.edg", save_path, output_name="g1")


hh2v.henhoe2vec.run(save_path / "g2.edg", save_path, output_name="g2")
[STATUS] Started parsing edgelist...
[STATUS] Finished parsing edgelist in 0 seconds
[STATUS] Started preprocessing transition probabilities...
[STATUS] Finished preprocessing transition probabilities in 6 seconds
[STATUS] Started generating random walks...
[STATUS] Finished generating random walks in 1 seconds
[STATUS] Started learning and saving embeddings...
[STATUS] Saved embeddings to /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources/g1.csv
[STATUS] Finished learning and saving embeddings in 0 seconds
Completed multilayer network embedding in 8.962503671646118 seconds. See results in /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources.
[STATUS] Started parsing edgelist...
[STATUS] Finished parsing edgelist in 0 seconds
[STATUS] Started preprocessing transition probabilities...
[STATUS] Finished preprocessing transition probabilities in 7 seconds
[STATUS] Started generating random walks...
[STATUS] Finished generating random walks in 1 seconds
[STATUS] Started learning and saving embeddings...
[STATUS] Saved embeddings to /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources/g2.csv
[STATUS] Finished learning and saving embeddings in 0 seconds
Completed multilayer network embedding in 10.342349290847778 seconds. See results in /home/kuehn/MP_GMM_FGW/MP.ML-FGM/code/resources.
In [ ]:
graphs = ["g1","g2"]
fig, axs = plt.subplots(ncols=len(graphs),figsize=(20.,10.))

for i,g in enumerate(graphs):

    df = pd.read_csv(save_path / (g + ".csv"), sep="\t", index_col=0, header=None)

    df_embed = TSNE(n_components=2, learning_rate='auto', init='random', perplexity=3).fit_transform(df.values)
    df_embed = pd.DataFrame(df_embed,columns=['x','y'])

    df_embed.index = [ast.literal_eval(tpl) for tpl in df.index]
    print(df_embed)
    df_embed["node"],df_embed["layer"] = zip(*df_embed.index.tolist())

    node_to_block = [block for block in range(len(blocks)) for _ in range(blocks_large[block])]
    df_embed['block'] = [node_to_block[int(float(node))] for node in df_embed['node']]

    df_embed

    

    sns.scatterplot(df_embed,x='x',y='y',hue='block',style='layer',palette="deep",ax=axs[i])
    sns.move_legend(axs[i], "upper left", bbox_to_anchor=(1, 1))
                     x          y
(0.0, 0.0)  -52.236229 -48.906242
(0.0, 1.0)   65.478745  10.129930
(0.0, 2.0)  -39.242016  11.346473
(1.0, 0.0)  -70.704750 -43.597038
(1.0, 1.0)   63.974987  41.218826
...                ...        ...
(98.0, 1.0) -57.603867   0.488806
(98.0, 2.0) -64.366547  45.937283
(99.0, 0.0) -32.651985 -59.495373
(99.0, 1.0) -68.590584  -7.058549
(99.0, 2.0) -64.516830  47.868187

[975 rows x 2 columns]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[6], line 16
     13 df_embed["node"],df_embed["layer"] = zip(*df_embed.index.tolist())
     15 node_to_block = [block for block in range(len(blocks)) for _ in range(blocks_large[block])]
---> 16 df_embed['block'] = [node_to_block[int(float(node))] for node in df_embed['node']]
     18 df_embed
     22 sns.scatterplot(df_embed,x='x',y='y',hue='block',style='layer',palette="deep",ax=axs[i])

Cell In[6], line 16, in <listcomp>(.0)
     13 df_embed["node"],df_embed["layer"] = zip(*df_embed.index.tolist())
     15 node_to_block = [block for block in range(len(blocks)) for _ in range(blocks_large[block])]
---> 16 df_embed['block'] = [node_to_block[int(float(node))] for node in df_embed['node']]
     18 df_embed
     22 sns.scatterplot(df_embed,x='x',y='y',hue='block',style='layer',palette="deep",ax=axs[i])

IndexError: list index out of range
In [ ]: